package br.com.officium.entidade.cadastro;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

/**
 * This is NOT an entity.
 *
 * @author Ivo
 */
public class UF implements Serializable {

    private String sigla;
    private String estado;
    private String capital;
    
    static List<String> siglas = new ArrayList<String>();
    static List<String> estados = new ArrayList<String>();
    static List<String> capitais = new ArrayList<String>();

    static {

        siglas.clear();
        estados.clear();
        capitais.clear();
        
        siglas.add("AC");
        siglas.add("AL");
        siglas.add("AP");
        siglas.add("AM");
        siglas.add("BA");
        siglas.add("CE");
        siglas.add("DF");
        siglas.add("ES");
        siglas.add("GO");
        siglas.add("MA");
        siglas.add("MT");
        siglas.add("MS");
        siglas.add("MG");
        siglas.add("PA");
        siglas.add("PB");
        siglas.add("PR");
        siglas.add("PE");
        siglas.add("PI");
        siglas.add("RJ");
        siglas.add("RN");
        siglas.add("RS");
        siglas.add("RO");
        siglas.add("RR");
        siglas.add("SC");
        siglas.add("SP");
        siglas.add("SE");
        siglas.add("TO");

        estados.add("Acre");
        estados.add("Alagoas");
        estados.add("Amapá");
        estados.add("Amazonas");
        estados.add("Bahia");
        estados.add("Ceará");
        estados.add("Distrito Federal");
        estados.add("Espírito Santo");
        estados.add("Goiás");
        estados.add("Maranhão");
        estados.add("Mato Grosso");
        estados.add("Mato Grosso do Sul");
        estados.add("Minas Gerais");
        estados.add("Pará");
        estados.add("Paraíba");
        estados.add("Paraná");
        estados.add("Pernambuco");
        estados.add("Piauí");
        estados.add("Rio de Janeiro");
        estados.add("Rio Grande do Norte");
        estados.add("Rio Grande do Sul");
        estados.add("Rondônia");
        estados.add("Roraima");
        estados.add("Santa Catarina");
        estados.add("São Paulo");
        estados.add("Sergipe");
        estados.add("Tocantins");

        capitais.add("Rio Branco");
        capitais.add("Maceió");
        capitais.add("Macapá");
        capitais.add("Manaus");
        capitais.add("Salvador");
        capitais.add("Fortaleza");
        capitais.add("Brasília");
        capitais.add("Vitória");
        capitais.add("Goiânia");
        capitais.add("São Luís");
        capitais.add("Cuiabá");
        capitais.add("Campo Grande");
        capitais.add("Belo Horizonte");
        capitais.add("Belém");
        capitais.add("João Pessoa");
        capitais.add("Curitiba");
        capitais.add("Recife");
        capitais.add("Teresina");
        capitais.add("Rio de Janeiro");
        capitais.add("Natal");
        capitais.add("Porto Alegre");
        capitais.add("Porto Velho");
        capitais.add("Boa Vista");
        capitais.add("Florianópolis");
        capitais.add("São Paulo");
        capitais.add("Aracaju");
        capitais.add("Palmas");

    }

    public UF() {
    }

    public UF(String sigla, String estado) {
        this.sigla = sigla;
        this.estado = estado;
    }

    public UF(String sigla, String estado, String capital) {
        this.sigla = sigla;
        this.estado = estado;
        this.capital = capital;
    }

    public String getEstado() {
        return estado;
    }

    public void setEstado(String estado) {
        this.estado = estado;
    }

    public String getSigla() {
        return sigla;
    }

    public void setSigla(String sigla) {
        this.sigla = sigla;
    }

    public String getCapital() {
        return capital;
    }

    public void setCapital(String capital) {
        this.capital = capital;
    }

    public static List<String> getSiglas() {

        return siglas;

    }

    public static List<String> getEstados() {

        return estados;

    }

    public static List<String> getCapitais() {

        return capitais;

    }

    /**
     *
     * @return Lista de UFs com Sigla, Nome do Estado e Capital.
     */
    public static List<UF> getUFSEC() {

        List<UF> ufs = new ArrayList<UF>();

        for (int i = 0; i < estados.size(); i++) {

            UF uf = new UF(siglas.get(i), estados.get(i), capitais.get(i));

            ufs.add(uf);
        }

        return ufs;

    }

    /**
     *
     * @return Lista de UFs com Sigla, Nome do Estado.
     */
    public static List<UF> getUFSE() {

        List<UF> ufs = new ArrayList<UF>();

        for (int i = 0; i < estados.size(); i++) {

            UF uf = new UF(siglas.get(i), estados.get(i));

            ufs.add(uf);
        }

        return ufs;

    }

    /**
     *
     * @return MAP onde key = sigla e value = estado
     */
    public static HashMap<String, String> getUF() {

        HashMap<String, String> uf = new HashMap<String, String>();

        int tam = capitais.size();

        for (int i = 0; i < tam; i++) {

            String sigla = siglas.get(i);
            String estado = estados.get(i);

            uf.put(sigla, estado);
        }

        return uf;

    }

    /**
     *
     * @param sigla
     * @return Nome do estado.
     */
    public static String getUF(String sigla) {
        return getUF().get(sigla);
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final UF other = (UF) obj;
        if ((this.sigla == null) ? (other.sigla != null) : !this.sigla.equals(other.sigla)) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 5;
        hash = 43 * hash + (this.sigla != null ? this.sigla.hashCode() : 0);
        return hash;
    }

    @Override
    public String toString() {
        return String.format("%s - %s (%s)", sigla, estado, capital);
    }
}
